package dao

import (
	"time"

	"gorm.io/gorm"
)

// GetExamLeftTime 获取考试剩余时间（示例，实际可根据业务调整）
func GetExamLeftTime(examId int) int {
	return 3600 // 示例返回 1 小时
}

// GetExamStat 获取考试统计信息（示例，实际可根据业务调整）
func GetExamStat(examId int) (total, unanswer, corrent, wrong int) {
	// 示例返回
	return 100, 90, 5, 5
}

// ExamExams 用户考试记录表
type ExamExams struct {
	ID         int        `gorm:"primaryKey" json:"id"`             // 主键ID
	UserID     int        `gorm:"not null;index" json:"user_id"`    // 用户ID
	Status     int8       `gorm:"default:1" json:"status"`          // 考试状态：1=未开始, 2=进行中, 3=已完成
	CreatedAt  *time.Time `gorm:"type:datetime" json:"created_at"`  // 考卷生成时间
	UpdatedAt  *time.Time `gorm:"type:datetime" json:"updated_at"`  // 最后更新时间
	FinishedAt *time.Time `gorm:"type:datetime" json:"finished_at"` // 考试完成时间
}

// 表名称
func (ExamExams) TableName() string {
	return "exam_exams"
}

func (e *ExamExams) UpdateExamEndTimeAndStatus() error {
	if DB == nil {
		return gorm.ErrInvalidDB
	}

	e.FinishedAt = ptrTime(time.Now())
	e.Status = 3 // 已完成

	return DB.Save(e).Error
}

func ptrTime(t time.Time) *time.Time {
	return &t
}

// !+ [非自身方法]

// CreateExamWithQuestions 创建考卷并关联题目
func CreateExamWithQuestions(exam *ExamExams, questions []ExamQuestions) error {
	if DB == nil {
		return gorm.ErrInvalidDB
	}
	// 创建考卷
	if err := DB.Create(exam).Error; err != nil {
		return err
	}
	// 关联题目
	for _, q := range questions {
		link := ExamExamQuestions{
			ExamID:     exam.ID,
			QuestionID: q.ID,
			CreatedAt:  exam.CreatedAt,
			UpdatedAt:  exam.CreatedAt,
		}
		if err := DB.Create(&link).Error; err != nil {
			return err
		}
	}
	return nil
}

// GetExamByID 根据ID获取考试记录
func GetExamByID(examId int) (*ExamExams, error) {
	if DB == nil {
		return nil, gorm.ErrInvalidDB
	}
	var exam ExamExams
	if err := DB.Where("id = ?", examId).First(&exam).Error; err != nil {
		return nil, err
	}
	return &exam, nil
}
